package com.ctshk.rpc.payment.dto.rep.alipay;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.math.BigDecimal;

/**
 * @BelongsProject: ctshk-cloud
 * @BelongsPackage: com.ctshk.rpc.payment.dto.rep.alipay
 * @Author: hef
 * @CreateTime: 2021-05-06 10:53
 * @Description: 描述
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class AliPayTradeQueryDTO extends AliPayResponseCommonDTO implements Serializable {
    /**
     * <pre>
     * 请求数据
     * </pre>
     */
    private RequestInfo request;
    /**
     * <pre>
     * 返回数据
     * </pre>
     */
    private ResponseInfo response;

    @Data
    public static class ResponseInfo implements Serializable {
        /**
         * <pre>
         * 关于商品的详细说明。不支持特殊字符。
         * </pre>
         */
        private String body;

        /**
         * <pre>
         * 买方的支付宝帐户
         * </pre>
         */
        private String buyerEmail;

        /**
         * <pre>
         * 支付宝分配的唯一买家ID
         * </pre>
         */
        private String buyerId;

        /**
         * <pre>
         * 折扣金额
         * </pre>
         */
        private String discount;

        /**
         * <pre>
         * 指示交易交易是否被锁定。
         * 如果值为1，则事务被锁定。
         * 如果值为0，则表示交易未锁定。
         * </pre>
         */
        private String flagTradeLocked;

        /**
         * <pre>
         * 创建事务的时间。格式：yyyy-MM-dd HH：mm：ss。使用GMT + 8。
         * </pre>
         */
        private String gmtCreate;

        /**
         * <pre>
         * The last time when the value of total_fee is modified. Format: yyyy-MM-dd HH:mm:ss. Use GMT +8
         * </pre>
         */
        private String gmtLastModifiedTime;

        /**
         * <pre>
         * 买方支付交易的时间。格式：yyyy-MM-dd HH：mm：ss。使用GMT + 8。
         * </pre>
         */
        private String gmtPayment;

        /**
         * <pre>
         * 指示是否调整了总费用。值是T（表示调整后的总费用），F是F（表示未调整的总费用）。
         * </pre>
         */
        private String isTotalFeeAdjust;

        /**
         * <pre>
         * 操作员角色，对于买方，值为B；对于卖方，值为S。
         * </pre>
         */
        private String operatorRole;

        /**
         * <pre>
         * 合作伙伴分配的唯一交易ID
         * </pre>
         */
        private String outTradeNo;

        /**
         * <pre>
         * 付款方式
         * </pre>
         */
        private String paymentMethod;

        /**
         * <pre>
         * 商品价格，精确到小数点后两位。单位为人民币，值范围为0.01-100000000.00。当买家通过支付宝香港付款时，单位为港币。
         * </pre>
         */
        private String price;

        /**
         * <pre>
         * 货物数量
         * </pre>
         */
        private String quantity;

        /**
         * <pre>
         * 卖家支付宝帐户
         * </pre>
         */
        private String sellerEmail;

        /**
         * <pre>
         * 卖家ID
         * </pre>
         */
        private String sellerId;

        /**
         * <pre>
         * 交易的简要说明。不支持特殊字符。注意：此字段的值将显示给客户。
         * </pre>
         */
        private String subject;

        /**
         * <pre>
         * 支付给买方的累计金额
         * </pre>
         */
        private String toBuyerFee;

        /**
         * <pre>
         * 支付给卖方的累计金额
         * </pre>
         */
        private String toSellerFee;

        /**
         * <pre>
         * 交易金额（人民币）。这是买方已支付的确切金额。精确到两位小数。买家以支付宝香港付款时，交易金额以港币为单位。
         * </pre>
         */
        private BigDecimal totalFee;

        /**
         * <pre>
         * 支付宝分配的唯一交易ID，长度范围为16-64位。如果同时出现out_trade_no和trade_no，则trade_no优先。
         * </pre>
         */
        private String tradeNo;

        /**
         * <pre>
         * 交易状态，值为
         * TRADE_FINISHED: 交易已支付。即使发生部分退款或全额退款，或在退款期限到期时，此状态仍然存在。
         * WAIT_BUYER_PAY: 交易已创建，正在等待客户付款。
         * TRADE_CLOSED: 由于付款超时，交易被关闭
         * </pre>
         */
        private String tradeStatus;

        /**
         * <pre>
         * 指示是否在交易中使用支付宝优惠券。该值对于已使用的优惠券可以为T，对于未使用的优惠券可以为F。
         * </pre>
         */
        private String useCoupon;
    }

    @Data
    public static class RequestInfo implements Serializable {

    }
}
